11-2 h}C堨

若要建立一個簡單的多維陣列,可直接經由 MATLAB 指令視窗內輸入,例如

Example 1: 11-多維陣列/mDim01.mA = [1 0 2 5; 4 1 8 7; 3 2 6 3]; A(:, :, 2) = [3 5 4 1; 2 6 2 1; 4 2 3 0] A(:,:,1) = 1 0 2 5 4 1 8 7 3 2 6 3 A(:,:,2) = 3 5 4 1 2 6 2 1 4 2 3 0

在上例中,是先建立一個二維陣列 A ,再輸入第二頁的二維陣列 A(:,:,2) ,依此方式逐頁輸入二維陣列的內容,即可建立三維陣列。如果直接設定某一個新頁的一個元素值,此時MATLAB 會將此頁其他未指定之元素直接設定為 0 ,例如:

Example 2: 11-多維陣列/mDim02.mA=[1 0 2 5; 4 1 8 7; 3 2 6 3]; A(:, :, 2)=[3 5 4 1; 2 6 2 1; 4 2 3 0]; A(2, 1, 3)=5; disp(A); (:,:,1) = 1 0 2 5 4 1 8 7 3 2 6 3 (:,:,2) = 3 5 4 1 2 6 2 1 4 2 3 0 (:,:,3) = 0 0 0 0 5 0 0 0 0 0 0 0

我們也可以使用 MATLAB 的純量展開(Scalar Expansion)的功能,直接設定一個純量給多維陣列的一頁,例如,若要將陣列 A 的第二頁的所有元素設為 7,可輸入如下:

Example 3: 11-多維陣列/mDim03.mA=[1 0 2 5; 4 1 8 7; 3 2 6 3]; A(:, :, 2)=7; disp(A); (:,:,1) = 1 0 2 5 4 1 8 7 3 2 6 3 (:,:,2) = 7 7 7 7 7 7 7 7 7 7 7 7

對於較複雜的多維陣列,可用 cat 指令來建立,其功能為「並排」數個陣列,並可指定「並排」時所用的維度,其指令格式如下:

Z = cat(dim, A, B, C…)

其中 A、B、C 為陣列,dim 是將 A、B、C… 合併時所用到的維度。例如:欲將矩陣 A 與 B 上下(垂直)並排,可輸入:

Example 4: 11-多維陣列/cat01.mA = [1 2; 3 4]; B = [1 0; 0 1]; Z = cat(1, A, B) % 數字 1 表示將陣列 A 與 B 上下垂直並排 Z = 1 2 3 4 1 0 0 1

若欲將陣列 A 與 B 左右(水平)並排,可輸入:

Example 5: 11-多維陣列/cat02.mA = [1 2; 3 4]; B = [1 0; 0 1]; Z = cat(2, A, B) % 數字 2 表示將陣列 A 與 B 左右水平並排 Z = 1 2 1 0 3 4 0 1

若欲將陣列 A 與 B 疊起來,以得到一個三維陣列,可輸入:

Example 6: 11-多維陣列/cat03.mA = [1 2; 3 4]; B = [1 0; 0 1]; Z = cat(3, A, B) % 數字 3 表示將陣列 A 與 B 重疊排成三維陣 Z(:,:,1) = 1 2 3 4 Z(:,:,2) = 1 0 0 1

若所設定的 dim 值比陣列 A、B、C…的各自原先的「維度數」(Dimensionality)還要超出 2 或更多,則 MATLAB 會自動補上大小為 1 的維度,例如:

Example 7: 11-多維陣列/cat04.mA = [1 2; 3 4]; B = [1 0; 0 1]; Z = cat(4, A, B) % 數字 4 表示將陣列 A 與 B 放在相鄰的兩「箱」 Z(:,:,1,1) = 1 2 3 4 Z(:,:,1,2) = 1 0 0 1

此時陣列 Z 的維度變為 2×2×1×2。(讀者可以想像這是分成兩箱的多維陣列,每一箱各有一頁,每一頁都是 2×2 的矩陣。 )

MATLAB 亦可產生特殊用途的多維陣列,例如:若要產生一個維度是 2×3×5 的亂數陣列,可用 rand 指令:

Example 8: 11-多維陣列/rand01.mA=rand(2,3,4) A(:,:,1) = 0.8147 0.1270 0.6324 0.9058 0.9134 0.0975 A(:,:,2) = 0.2785 0.9575 0.1576 0.5469 0.9649 0.9706 A(:,:,3) = 0.9572 0.8003 0.4218 0.4854 0.1419 0.9157 A(:,:,4) = 0.7922 0.6557 0.8491 0.9595 0.0357 0.9340

類似的指令,還有 randn、ones、zeros 等用來產生特殊用途的矩陣,詳見本書第九章「矩陣的處理與運算」的第二節「特殊用途矩陣」。


MATLAB程式設計:入門篇